<?php
class UsersController extends AppController{
	var $name = 'Users';
	var $view = 'Theme';
    var $theme = HOST;
	var $components = array( 'Auth','Session','RequestHandler','Email','Cookie','CompCms','Password');
    var $permissions = array();
 	var $countrycod = array(
	    "GB"=>"United Kingdom",
	    "AF"=>"Afghanistan",
	    "AX"=>"Aland Islands",
	    "AL"=>"Albania",
	    "DZ"=>"Algeria",
	    "AS"=>"American Samoa",
	    "AD"=>"Andorra",
	    "AO"=>"Angola",
	    "AI"=>"Anguilla",
	    "AQ"=>"Antarctica",
	    "AG"=>"Antigua and Barbuda",
	    "AR"=>"Argentina",
	    "AM"=>"Armenia",
	    "AW"=>"Aruba",
	    "AU"=>"Australia",
	    "AT"=>"Austria",
	    "AZ"=>"Azerbaijan",
	    "BS"=>"Bahamas",
	    "BH"=>"Bahrain",
	    "BD"=>"Bangladesh",
	    "BB"=>"Barbados",
	    "BY"=>"Belarus",
	    "BE"=>"Belgium",
	    "BZ"=>"Belize",
	    "BJ"=>"Benin",
	    "BM"=>"Bermuda",
	    "BT"=>"Bhutan",
	    "BO"=>"Bolivia",
	    "BA"=>"Bosnia and Herzegovina",
	    "BW"=>"Botswana",
	    "BV"=>"Bouvet Island",
	    "BR"=>"Brazil",
	    "IO"=>"British Indian Ocean Territory",
	    "BN"=>"Brunei Darussalam",
	    "BG"=>"Bulgaria",
	    "BF"=>"Burkina Faso",
	    "BI"=>"Burundi",
	    "KH"=>"Cambodia",
	    "CM"=>"Cameroon",
	    "CA"=>"Canada",
	    "CV"=>"Cape Verde",
	    "KY"=>"Cayman Islands",
	    "CF"=>"Central African Republic",
	    "TD"=>"Chad",
	    "CL"=>"Chile",
	    "CN"=>"China",
	    "CX"=>"Christmas Island",
	    "CC"=>"Cocos (Keeling) Islands",
	    "CO"=>"Colombia",
	    "KM"=>"Comoros",
	    "CG"=>"Congo",
	    "CD"=>"Congo, The Democratic Republic of the",
	    "CK"=>"Cook Islands",
	    "CR"=>"Costa Rica",
	    "CI"=>"Côte d'Ivoire",
	    "HR"=>"Croatia",
	    "CU"=>"Cuba",
	    "CY"=>"Cyprus",
	    "CZ"=>"Czech Republic",
	    "DK"=>"Denmark",
	    "DJ"=>"Djibouti",
	    "DM"=>"Dominica",
	    "DO"=>"Dominican Republic",
	    "EC"=>"Ecuador",
	    "EG"=>"Egypt",
	    "SV"=>"El Salvador",
	    "GQ"=>"Equatorial Guinea",
	    "ER"=>"Eritrea",
	    "EE"=>"Estonia",
	    "ET"=>"Ethiopia",
	    "FK"=>"Falkland Islands (Malvinas)",
	    "FO"=>"Faroe Islands",
	    "FJ"=>"Fiji",
	    "FI"=>"Finland",
	    "FR"=>"France",
	    "GF"=>"French Guiana",
	    "PF"=>"French Polynesia",
	    "TF"=>"French Southern Territories",
	    "GA"=>"Gabon",
	    "GM"=>"Gambia",
	    "GE"=>"Georgia",
	    "DE"=>"Germany",
	    "GH"=>"Ghana",
	    "GI"=>"Gibraltar",
	    "GR"=>"Greece",
	    "GL"=>"Greenland",
	    "GD"=>"Grenada",
	    "GP"=>"Guadeloupe",
	    "GU"=>"Guam",
	    "GT"=>"Guatemala",
	    "GG"=>"Guernsey",
	    "GN"=>"Guinea",
	    "GW"=>"Guinea-Bissau",
	    "GY"=>"Guyana",
	    "HT"=>"Haiti",
	    "HM"=>"Heard Island and McDonald Islands",
	    "VA"=>"Holy See (Vatican City State)",
	    "HN"=>"Honduras",
	    "HK"=>"Hong Kong",
	    "HU"=>"Hungary",
	    "IS"=>"Iceland",
	    "IN"=>"India",
	    "ID"=>"Indonesia",
	    "IR"=>"Iran, Islamic Republic of",
	    "IQ"=>"Iraq",
	    "IE"=>"Ireland",
	    "IM"=>"Isle of Man",
	    "IL"=>"Israel",
	    "IT"=>"Italy",
	    "JM"=>"Jamaica",
	    "JP"=>"Japan",
	    "JE"=>"Jersey",
	    "JO"=>"Jordan",
	    "KZ"=>"Kazakhstan",
	    "KE"=>"Kenya",
	    "KI"=>"Kiribati",
	    "KP"=>"Korea, Democratic People's Republic of",
	    "KR"=>"Korea, Republic of",
	    "KW"=>"Kuwait",
	    "KG"=>"Kyrgyzstan",
	    "LA"=>"Lao People's Democratic Republic",
	    "LV"=>"Latvia",
	    "LB"=>"Lebanon",
	    "LS"=>"Lesotho",
	    "LR"=>"Liberia",
	    "LY"=>"Libyan Arab Jamahiriya",
	    "LI"=>"Liechtenstein",
	    "LT"=>"Lithuania",
	    "LU"=>"Luxembourg",
	    "MO"=>"Macao",
	    "MK"=>"Macedonia, The Former Yugoslav Republic of",
	    "MG"=>"Madagascar",
	    "MW"=>"Malawi",
	    "MY"=>"Malaysia",
	    "MV"=>"Maldives",
	    "ML"=>"Mali",
	    "MT"=>"Malta",
	    "MH"=>"Marshall Islands",
	    "MQ"=>"Martinique",
	    "MR"=>"Mauritania",
	    "MU"=>"Mauritius",
	    "YT"=>"Mayotte",
	    "MX"=>"Mexico",
	    "FM"=>"Micronesia, Federated States of",
	    "MD"=>"Moldova",
	    "MC"=>"Monaco",
	    "MN"=>"Mongolia",
	    "ME"=>"Montenegro",
	    "MS"=>"Montserrat",
	    "MA"=>"Morocco",
	    "MZ"=>"Mozambique",
	    "MM"=>"Myanmar",
	    "NA"=>"Namibia",
	    "NR"=>"Nauru",
	    "NP"=>"Nepal",
	    "NL"=>"Netherlands",
	    "AN"=>"Netherlands Antilles",
	    "NC"=>"New Caledonia",
	    "NZ"=>"New Zealand",
	    "NI"=>"Nicaragua",
	    "NE"=>"Niger",
	    "NG"=>"Nigeria",
	    "NU"=>"Niue",
	    "NF"=>"Norfolk Island",
	    "MP"=>"Northern Mariana Islands",
	    "NO"=>"Norway",
	    "OM"=>"Oman",
	    "PK"=>"Pakistan",
	    "PW"=>"Palau",
	    "PS"=>"Palestinian Territory, Occupied",
	    "PA"=>"Panama",
	    "PG"=>"Papua New Guinea",
	    "PY"=>"Paraguay",
	    "PE"=>"Peru",
	    "PH"=>"Philippines",
	    "PN"=>"Pitcairn",
	    "PL"=>"Poland",
	    "PT"=>"Portugal",
	    "PR"=>"Puerto Rico",
	    "QA"=>"Qatar",
	    "RE"=>"Réunion",
	    "RO"=>"Romania",
	    "RU"=>"Russian Federation",
	    "RW"=>"Rwanda",
	    "BL"=>"Saint Barthélemy",
	    "SH"=>"Saint Helena",
	    "KN"=>"Saint Kitts and Nevis",
	    "LC"=>"Saint Lucia",
	    "MF"=>"Saint Martin",
	    "PM"=>"Saint Pierre and Miquelon",
	    "VC"=>"Saint Vincent and the Grenadines",
	    "WS"=>"Samoa",
	    "SM"=>"San Marino",
	    "ST"=>"Sao Tome and Principe",
	    "SA"=>"Saudi Arabia",
	    "SN"=>"Senegal",
	    "RS"=>"Serbia",
	    "SC"=>"Seychelles",
	    "SL"=>"Sierra Leone",
	    "SG"=>"Singapore",
	    "SK"=>"Slovakia",
	    "SI"=>"Slovenia",
	    "SB"=>"Solomon Islands",
	    "SO"=>"Somalia",
	    "ZA"=>"South Africa",
	    "GS"=>"South Georgia and the South Sandwich Islands",
	    "ES"=>"Spain",
	    "LK"=>"Sri Lanka",
	    "SD"=>"Sudan",
	    "SR"=>"Suriname",
	    "SJ"=>"Svalbard and Jan Mayen",
	    "SZ"=>"Swaziland",
	    "SE"=>"Sweden",
	    "CH"=>"Switzerland",
	    "SY"=>"Syrian Arab Republic",
	    "TW"=>"Taiwan, Province of China",
	    "TJ"=>"Tajikistan",
	    "TZ"=>"Tanzania, United Republic of",
	    "TH"=>"Thailand",
	    "TL"=>"Timor-Leste",
	    "TG"=>"Togo",
	    "TK"=>"Tokelau",
	    "TO"=>"Tonga",
	    "TT"=>"Trinidad and Tobago",
	    "TN"=>"Tunisia",
	    "TR"=>"Turkey",
	    "TM"=>"Turkmenistan",
	    "TC"=>"Turks and Caicos Islands",
	    "TV"=>"Tuvalu",
	    "UG"=>"Uganda",
	    "UA"=>"Ukraine",
	    "AE"=>"United Arab Emirates",
	    "GB"=>"United Kingdom",
	    "US"=>"United States",
	    "UM"=>"United States Minor Outlying Islands",
	    "UY"=>"Uruguay",
	    "UZ"=>"Uzbekistan",
	    "VU"=>"Vanuatu",
	    "VE"=>"Venezuela",
	    "VN"=>"Viet Nam",
	    "VG"=>"Virgin Islands, British",
	    "VI"=>"Virgin Islands, U.S.",
	    "WF"=>"Wallis and Futuna",
	    "EH"=>"Western Sahara",
	    "YE"=>"Yemen",
	    "ZM"=>"Zambia",
	    "ZW"=>"Zimbabwe"	
	);
	public function beforeFilter(){
		parent::beforeFilter();
		$this->Auth->autoRedirect = false;
	    if(!empty($this->data) && isset($this->data['User']['email']) && is_numeric($this->data['User']['email'])){
    		$this->data['User']['id'] = $this->data['User']['email'];
    		$this->Auth->fields = array('username' => 'id', 'password' => 'password');
    	}else{
			$this->Auth->fields = array('username' => 'email', 'password' => 'password');
    	}
		$this->Auth->authorize = 'controller';
        $this->Auth->loginAction = array('plugin'=>null,'controller' => 'users', 'action' => 'login');
        
//        $this->Auth->loginRedirect = array('plugin'=>'snapcuts','controller' => 'snap_movies', 'action' => 'display');        
//        $this->Auth->logoutRedirect = array('plugin'=>null,'controller' => 'pages', 'action' => 'display');			
			
	}
	
	public function beforeRender(){
		parent::beforeRender();
	}

    function login(){
    	if(!empty($this->data)){
    		$this->Auth->login($this->data);
    		if($this->Session->check('Auth.User.id')){
	    		$user = $this->User->findById($this->Auth->user('id'));
	    		$this->Session->write("User",$user);
	    		$this->redirect($this->Auth->loginRedirect);
    		}else{
    			$this->Session->setFlash(__('The user could not login. Please, try again.', true));
    		}
    	}
    }
    
    function logout() {
    	$this->Session->delete("User");
    	$this->Session->delete("Auth");
    	$this->Session->delete('Store');
    	$this->Session->delete('Timeline',array());
		
    	$this->Session->setFlash(__('You have been successfully logged out of SnapCuts.', true));
		$this->redirect($this->Auth->logout());
    }
    
	function register() {
	    if(!empty($this->data)) {
	    		$this->transaction->begin($this);
				
				$this->data['User']['email'] = $this->data['Customer']['email'];
				$password = $this->Password->get();	// nie zaszyfrowane hasło do wysłania klientowi
				$this->data['User']['password'] =  $this->Auth->password($password);
				$this->data['User']['status'] = 1;
				$this->data['User']['group'] = 'firms';
				$this->User->Customer->set( $this->data );
				if ($this->User->Customer->validates()) {
							
					$this->User->create();
					if ($this->User->save($this->data)) {
						$this->data['Customer']['user_id'] = $this->User->getLastInsertID();
						$this->data['Customer']['registration_date'] = date('Y-m-d H:i:s');
						$this->User->Customer->create();
						if ($this->User->Customer->save($this->data)) {
							
	    					$user_['User']['email'] = $this->data['User']['email'];
	    					$user_['User']['password'] = $this->data['User']['password'];
	    					
	    					if($this->Auth->login($user_)){
	    						$user = $this->User->findById($this->Auth->user('id'));
	    						$this->Session->write("User",$user);
	    					}
	    					$this->transaction->commit($this);
	    					$this->Session->setFlash(__d('store','The customer has been saved', true));
							$this->redirect(array('plugin'=>false,'controller'=>'pages','action'=>'display'));
						} else {
							$this->Session->setFlash(__d('store','The customer could not be saved. Please, try again.', true));
							$this->transaction->rollback($this);
						}
					} else {
						$this->Session->setFlash(__d('store','The customer could not be saved. Please, try again.', true));
						$this->transaction->rollback($this);
					}
	
				} else {
					$this->Session->setFlash(__d('store','The customer could not be saved. Please, try again.', true));
					$this->transaction->rollback($this);
				}   	
		}
		$this->set('countrycod',$this->countrycod);
	}
	
	
	public function new_password(){
		
    	if(!empty($this->data) && isset($this->data['User']['email'])){
    		$user = $this->User->findByEmail($this->data['User']['email']);
    		if(!is_array($user)){
    			$this->Session->setFlash(__("You have entered the wrong address e-mial",true));
    			$this->redirect($this->referer());
    		}
    		$new_password = $this->Password->get();
    		$user['User']['password'] = $this->Auth->password($new_password);
    		$this->User->id = $user['User']['id'];
    		if($this->User->save($user)){  
    			$user['User']['password'] = $new_password;
    			$this->data = $user;	
		    	$this->Email->to = $user['User']['email']; 
//		        $this->Email->bcc = array('bok@21w.pl');
		        $this->Email->subject = __("New SnapCuts password.",true); 
		        $this->Email->replyTo = $user['User']['email']; 
		        $this->Email->from = $_SERVER['HTTP_HOST'].' <info@snapcuts.com>'; 
		        $this->Email->template = 'new-password'; 
		        $this->Email->sendAs = 'both'; // text; html; both;

		        if ( $this->Email->send() ) { 
		            $this->Session->setFlash(__("Password has been reset. Please check your email.",true)); 
		        } else { 
		            $this->Session->setFlash(__("Error sending. Please, try again.",true)); 
		        }
		        $this->redirect($this->referer());
    		}
    	}
    }
}